]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
format: support %Id conversion characters in format.js
authorCosimo Cecchi <cosimoc@gnome.org>
Thu, 29 Mar 2012 19:29:48 +0000 (15:29 -0400)
committerCosimo Cecchi <cosimoc@gnome.org>
Thu, 29 Mar 2012 21:30:02 +0000 (17:30 -0400)
This is needed for languages which translate numbers with an
alternative representation, such as Persian.

https://bugzilla.gnome.org/show_bug.cgi?id=673106

js/misc/format.js
src/shell-util.c
src/shell-util.h

index 54320c0bc9eaaaf1634ac4b4cdb8fd64b20438b4..74972ac7f9bc2a5f2b02249107427be3de88f277 100644 (file)
@@ -1,5 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 
+const Shell = imports.gi.Shell;
+
 /*
  * This function is intended to extend the String object and provide
  * an String.format API for string formatting.
@@ -17,11 +19,16 @@ function format() {
     let i = 0;
     let args = arguments;
 
-    return str.replace(/%([0-9]+)?(?:\.([0-9]+))?(.)/g, function (str, widthGroup, precisionGroup, genericGroup) {
+    return str.replace(/%(I+)?([0-9]+)?(?:\.([0-9]+))?(.)/g, function (str, flagsGroup, widthGroup, precisionGroup, genericGroup) {
 
                     if (precisionGroup != '' && genericGroup != 'f')
                         throw new Error("Precision can only be specified for 'f'");
 
+                    let hasAlternativeIntFlag = (flagsGroup.indexOf('I') != -1);
+
+                    if (hasAlternativeIntFlag && genericGroup != 'd')
+                        throw new Error("Alternative output digits can only be specfied for 'd'");
+
                     let fillChar = (widthGroup[0] == '0') ? '0' : ' ';
                     let width = parseInt(widthGroup, 10) || 0;
 
@@ -41,7 +48,11 @@ function format() {
                             s = args[i++].toString();
                             break;
                         case 'd':
-                            s = parseInt(args[i++]).toString();
+                            let intV = parseInt(args[i++]);
+                            if (hasAlternativeIntFlag)
+                                s = Shell.format_int_alternative_output(intV);
+                            else
+                                s = intV.toString();
                             break;
                         case 'x':
                             s = parseInt(args[i++]).toString(16);
index 0a1baab39b5d78331ad67a15a26999038d2cda0b..e7be8129b7c4c3f1a2aceef784e9dd1515f99c9a 100644 (file)
@@ -868,3 +868,15 @@ shell_util_wifexited (int  status,
 
   return ret;
 }
+
+/**
+ * shell_format_int_alternative_output:
+ * @intval:
+ *
+ * Returns: (transfer full):
+ */
+gchar *
+shell_format_int_alternative_output (gint intval)
+{
+  return g_strdup_printf ("%Id", intval);
+}
index bfb5089d512a901b22af3098616dc3a19a15892d..2b21886a67d9a363c5c0d52a97ee1ef60fcf15d4 100644 (file)
@@ -52,6 +52,9 @@ gboolean shell_session_is_active_for_systemd (void);
 gboolean shell_util_wifexited                  (int               status,
                                                 int              *exit);
 
+gchar    *shell_format_int_alternative_output  (gint              intval);
+
+
 G_END_DECLS
 
 #endif /* __SHELL_UTIL_H__ */